package lession4;

/*public公共修饰符，可以被其他类使用
 * 无修饰，在同一个包中被其他类使用
 * abstract:该类不能被实例化
 * final:不能有子类
 * private:只能被改类使用和调用
 * 
 * */
public class Demo1 {
	String name, sno;
	double score1, score2, score3;
	//构造方法，初始化类的成员，自动被调用(在new的时候)
	//1.名字跟类名一致 
	//2.没有返回值 
	//3.可以写多个构造方法，即 重载（overload）,oo的第三大特性 多态 的一种：一种形式(没有记忆负担)，多种形态
	//4.理论上同名的方法可以写无数多个
	Demo1(String n1, String no1, double c1, double c2, double c3) {
		name = n1;
		sno = no1;
		score1 = c1;
		score2 = c2;
		score3 = c3;
		System.out.println("构造方法被调用");
		System.out.println("name = " + name + ",sno = " + sno);
		System.out.println("score1 = " + score1);
		System.out.println("score2 = " + score2);
		System.out.println("score3 = " + score3);
	}
	//第二个构造方法，只初始化前两个参数，
	Demo1(String n1, String no1) {
		name = n1;
		sno = no1;
		System.out.println("构造方法2被调用");
		System.out.println("name = " + name + ",sno = " + sno);
	}
	//第三个构造方法，默认构造方法(default)
	//如果没有明确赋值，则默认
	Demo1() {
		System.out.println("默认方法被调用");
	}
	//一个错误示范
//	Demo1(double n1, double sno) {
//		
//	}
	
//	//设置前两个属性的值
//	void set1(String n1, String s1) {
//		name = n1;
//		sno = s1;
//		System.out.println("name = "+ name + ",sno = " + sno);
//	}
//	//设置所有属性的值
//	void set2(String n1, String s1, double c1, double c2, double c3) {
//		name = n1;
//		sno = s1;
//		if(c1 >= 0 && c1 <= 100) {
//			score1 = c1;
//		}
//		score2 = c2;
//		score3 = c3;
//		System.out.println("name = "+ name + ",sno = " + sno);
//		System.out.println("score1 : " + score1);
//		System.out.println("score2 : " + score2);
//		System.out.println("score1 : " + score2);
//	}
//	//获取score1
//	double gets1() {
//		return score1;
//	}
	
//	//设置后三个属性的值
//	void set3(double c1, double c2, double c3) {
//		score1 = c1;
//		score2 = c2;
//		score3 = c3;
//		System.out.println("score1 : " + score1);
//		System.out.println("score2 : " + score2);
//		System.out.println("score1 : " + score2);
//	}
	
	
	/*	1.类的成员需要某种方法初始化，手写方法赋值；内存管理，出main之后，自动释放内存
	 * 	2.类的成员访问，直接访问，破坏了封装性，类成了一个白盒,封装成员方法
	 * 	3.构造方法、重载
	 * */
	public static void main(String[] args) {
		//构造方法好处：简洁，
		Demo1 stu1 = new Demo1("王二", "2021032", 89.8, 89.4, 23.3);//可以调用构造方法
		Demo1 stu2 = new Demo1("小刘", "2022034", 22.4, 44.5, 33.4);
		Demo1 stu3 = new Demo1("小马", "2023043");
		Demo1 stu4 = new Demo1("小新", "23456");
		Demo1 stu5 = new Demo1();
		Demo1 stu6 = new Demo1();
		System.out.println(stu5.name);
//		Demo1 zhangsan = new Demo1();
//		//使用new运算后，分配一块内存，足够将属性值存放，大小跟成员多少有关
//		zhangsan.set1("张三", "20220601100");
//		
//		Demo1 xiaoli = new Demo1();
//		xiaoli.set2("小李", "20220601199", 90.0, 90.1, 90.5);
////		xiaoli.gets1();
//		System.out.println("小李'name " + xiaoli.name);//对象.成员直接访问
	}
}
